#include <bits/stdc++.h>

using namespace std;

const int N = 14;
char s[N][N];
bool flag = 0;
int n , f1[N][2] , f2[N][2] , A[1024];

//判断是否也三个连续的数字
bool check(int x , int y)
{
    if(x > 2 && s[x][y] == s[x - 1][y] && s[x][y] == s[x - 2][y])
        return false;
    if(y > 2 && s[x][y] == s[x][y - 1] && s[x][y] == s[x][y - 2])
        return false;
    
    return true;
}
void bfs(int x , int y)
{
    if(flag) return;
    
    //到达右下角
    if(x == n + 1 && y == 1)
    {
        bool res = 1;
        //剪枝1 检查是否每行重复
        for(int i = 1;i <= n;i ++)
        {
            int x = 0;
            for(int j = 1;j <= n;j ++)
                x = x * 2 + s[i][j] - '0';
            if(A[x]) res = 0;
            A[x] ++;
        }
        
        //剪枝4 检查是否连续三个相同的数字
        for(int i = 1;i <= n;i ++)
        {
            for(int j = 2;j < n;j ++)
                if(s[i][j-1] == s[i][j] && s[i][j] == s[i][j + 1])
                    res = 0;
            for(int j = 2;j < n;j ++)
                if(s[j-1][i] == s[j][i] && s[j][i] == s[j+1][i])
                    res = 0;
        }
        
        //清除行状态
        for(int i = 1;i <= n;i ++)
        {
            int x = 0;
            for(int j = 1;j <= n;j ++)
                x = x * 2 + s[i][j] - '0';
            A[x]--;
        }
        if(!res) return;
        flag = 1;
        for(int i = 1;i <= n;i ++)
        {
            for(int j = 1;j <= n;j ++)
                putchar(s[i][j]);
            puts("");
        }
        return;
    }
    int a = x , b = y;
    b ++;
    if(b == n + 1)
        b = 1 , a ++;
    //剪枝：跳过已经填过的地方
    if(s[x][y] != '_')
    {
        bfs(a , b);
        return;
    }
    s[x][y] = '0';
    f1[x][0]++;
    f2[y][0]++;
    //剪枝 每行每列01不能超过数量的一半
    if(f1[x][0] <= n / 2 && f2[y][0] <= n / 2 && check(x,y))
        bfs(a , b);
    //回溯
    f1[x][0]--;
    f2[y][0]--;
    
    //填1
    s[x][y] = '1';
    f1[x][1]++;
    f2[y][1]++;
    
    //剪枝 
    if(f1[x][1] <= n / 2 && f2[y][1] <= n / 2 && check(x,y))
        bfs(a , b);
    f1[x][1]--;
    f2[y][1]--;
    
    s[x][y] = '_';
}
int main()
{
    cin >> n;
    for(int i = 1;i <= n;i ++) scanf("%s" , s[i] + 1);
    
    for(int i = 1;i <= n;i ++)
        for(int j = 1;j <= n;j ++)
            if(s[i][j] != '_')
            {
                f1[i][s[i][j] - '0']++;
                f2[j][s[i][j] - '0']++;
            }
    
    bfs(1 , 1);
    return 0;
}